[iOSアプリ開発] いまさら聞けないモダンな書き方
Xcode 4.4 から Objective-C が書きやすくなりました、という今更のいまさらな話ですが、ネット上に転がっている少し前のサンプルソースなどは古い書き方のものもあるようなので、今回はよく使う NSArray と NSDictionary と NSNumber の書き方についてだけ備忘録として残しておこうと思います。
NSArray
インスタンスの生成
// 古い書き方 NSArray *oldArr = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; NSMutableArray *oldMutableArr = [NSMutableArray arrayWithObjects:@"value4", @"value5", @"value6", nil]; // 新しい書き方 NSArray *newArr = @[@"value1", @"value2", @"value3"]; NSMutableArray *newMutableArr = [@[@"value4", @"value5", @"value6"] mutableCopy];
@[ ] で NSArray を生成できます。
NSMutableArray について、古い書き方の L3 が、そのまま新しい書き方の L7 になるわけではないですが、
NSArray を簡単な書き方で生成してから mutableCopy で NSMutableArray を生成した方が書きやすいです。
要素の取得
// 古い書き方 NSString *oldItem = [oldArr objectAtIndex:0]; // 新しい書き方 NSString *newItem = newArr[0];
添字 [n] で要素を取得できます。NSArray と NSMutableArray の両方で使えます。
要素の置き換え
// 古い書き方 [oldMutableArr replaceObjectAtIndex:0 withObject:@"value7"]; // 新しい書き方 newMutableArr[0] = @"value7";
添字 [n] で要素を置き換えることができます。
NSMutableArray で使えます。NSArray では要素を置き換えることができないので使えません。
NSDictionary
インスタンスの生成
// 古い書き方 NSDictionary *oldDic = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2", @"value3", @"key3", nil]; NSMutableDictionary *oldMutableDic = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"value4", @"key4", @"value5", @"key5", @"value6", @"key6", nil]; // 新しい書き方 NSDictionary *newDic = @{@"key1":@"value1", @"key2":@"value2", @"key3":@"value3"}; NSMutableDictionary *newMutableDic = [@{@"key4":@"value4", @"key5":@"value5", @"key6":@"value6"} mutableCopy];
@{ } で NSDictionary を生成できます。
NSMutableDictionary について、古い書き方の L8 〜 L12 が、そのまま新しい書き方の L19 〜 L22 になるわけではないですが、
NSDictionary を簡単な書き方で生成してから mutableCopy で NSMutableDictionary を生成した方が書きやすいです。
要素の取得
// 古い書き方 NSString *oldKey1Item = [oldDic objectForKey:@"key1"]; // 新しい書き方 NSString *newKey1Item = newDic[@"key1"];
添字 [キー値] で要素を取得できます。NSDictionary と NSMutableDictionary の両方で使えます。
要素の置き換え、追加
// 古い書き方 [oldMutableDic setObject:@"updateValue1" forKey:@"key1"]; // 新しい書き方 newMutableDic[@"key1"] = @"updateValue1";
添字 [キー値] で要素の置き換え、追加ができます。
NSMutableDictionary で使えます。NSDictionary では要素を置き換えることができないので使えません。
NSNumber
// 古い書き方 NSNumber *oldInt = [NSNumber numberWithInt:12]; NSNumber *oldUnsignedInt = [NSNumber numberWithUnsignedInt:34U]; NSNumber *oldLong = [NSNumber numberWithLong:56L]; NSNumber *oldLongLong = [NSNumber numberWithLongLong:78LL]; NSNumber *oldFloat = [NSNumber numberWithFloat:12.34f]; NSNumber *oldDouble = [NSNumber numberWithDouble:56.78]; NSNumber *oldYes = [NSNumber numberWithBool:YES]; NSNumber *oldNo = [NSNumber numberWithBool:NO]; NSNumber *oldNum = [NSNumber numberWithDouble:M_PI / 2.0]; // 新しい書き方 NSNumber *newInt = @12; NSNumber *newUnsignedInt = @34U; NSNumber *newLong = @56L; NSNumber *newLongLong = @78LL; NSNumber *newFloat = @12.34f; NSNumber *newDouble = @56.78; NSNumber *newYes = @YES; NSNumber *newNo = @NO; NSNumber *newNum = @(M_PI / 2.0);
それぞれ numberWith... を使わずに書くことができます。
一括変換
ついでに、Xcode には簡単に一括変換してくれる機能が搭載されています。
「Edit」 > 「Refactor」 > 「Convert to Modern Objective-C Syntax...」 から変換することができます。
これだけでも読みやすくなるので、非常に便利です。
ではでは。